class code4 {
    //存在重复元素 III：TreeSet,set.floor和set.ceiling找到最接近的两个数
    public boolean containsNearbyAlmostDuplicate(int[] nums, int indexDiff, int valueDiff) {
        TreeSet<Long> set = new TreeSet();
        for(int i=0;i<nums.length;i++) {
            Long x = (long)nums[i];
            //小于等于 u 的最接近 u 的数
            Long l = set.floor(x);
            //大于等于 u 的最接近 u 的数
            Long r = set.ceiling(x);
            //更新结果
            if(l!=null && x-l<=valueDiff) return true;
            if(r!=null && r-x<=valueDiff) return true;
            //进窗口
            set.add(x);
            //判断
            if(set.size() > indexDiff) {
                //出窗口
                set.remove((long)nums[i-indexDiff]);
            }
        }
        return false;
    }
}